import { ref } from 'vue'
import app from '@/app'
import orderStore from '../../../store'
import { post } from '@/api/store/order_pay'

const store = {
  // 待付金额
  remain: ref(0),
  order: ref({}),
  data: ref({}),

  getData() {
    return this.data.value
  },

  getId() {
    return this.order.value.id
  },

  getTotal() {
    return this.order.value.money
  },

  getMoney() {
    return this.getData().pay_money
  },

  getRemain() {
    return this.remain.value
  },

  getStatus() {
    return this.getData().pay_status
  },

  getPay() {
    return this.getData().data
  },

  init(data) {
    this.order.value = Object.assign({}, data)
    this.data.value = {
      pay_money: data.pay_money,
      pay_status: data.pay_status,
      pay_change: 0,
      data: [...data.pay]
    }

    this.update()
  },

  // 更新统计
  update() {
    let money = 0
    // 支付金额统计
    this.getPay().forEach(item => {
      money = app.math.add(money, item.money)
    })

    // 实付
    this.getData().pay_money = money

    // 判断是否完成
    this.getData().pay_status = Number(Math.abs(this.getTotal()) <= Math.abs(this.getMoney()))

    // 算出剩余，如果已完成就等于 0 
    this.remain.value = this.getStatus() ? 0 : app.math.sub(this.getTotal(), this.getMoney())
  },

  // 添加
  add(data) {
    // 携带时间戳
    data.created_at = new Date
    this.getPay().unshift(data)
    this.update() 
    return this.post()
  },

  // 删除
  del(i) {
    this.getPay().splice(i, 1)
    this.update()
    return this.post()
  },

  // 提交
  post() {
    // 组合数据
    const data = {
      pay_money: this.getMoney(),
      pay_change: 0,
      pay_status: this.getStatus(),
      data: this.getPay()
    }

    // 开始提交
    return new Promise((resolve, jeject) => {
      post(this.getId(), data).then(res => {
        resolve(res)
        // 更新列表
        orderStore.get()
      }).catch(res => {
        jeject(res)
      })
    })
  }
}

export default store